package com.aida.evil.eda.Volley;

import com.android.volley.AuthFailureError;
import com.android.volley.Request.Method;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;

import org.json.JSONObject;

import java.util.Map;


public class VolleyHttpRequest
{


    /**
     * 1.
     * StringRequest GET方式
     *
     * @param url           地址
     * @param volleyRequest 回调函数
     */
    public static void String_request(String url, VolleyHandler<String> volleyRequest)
    {
        Volley_StringRequest(Method.GET, url, null, volleyRequest);
    }

    /**
     * 1.
     * StringRequset POST方式
     *
     * @param url           地址
     * @param map           参数
     * @param volleyRequest 回调函数
     */
    public static void String_request(String url, final Map<String, String> map, VolleyHandler<String> volleyRequest)
    {
        Volley_StringRequest(Method.POST, url, map, volleyRequest);
    }

    /**
     * 1.
     * StringRequset_headers GET方式
     *
     * @param url           地址
     * @param map           参数
     * @param volleyRequest 回调函数
     */
    public static void String_request_headers(String url, VolleyHandler<String> volleyRequest, final Map<String, String> map)
    {
        Volley_StringRequest_headers(Method.GET, url, map, volleyRequest);
    }

    /**
     * 1.
     * 封装 StringRequest 数据请求
     *
     * @param method        方式
     * @param url           地址
     * @param params        参数
     * @param volleyRequest 回调对象
     */
    private static void Volley_StringRequest(int method, String url, final Map<String, String> params, VolleyHandler<String> volleyRequest)
    {
        StringRequest stringrequest = new StringRequest(method, url, volleyRequest.reqLis, volleyRequest.reqErr)
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError
            {
                return params;
            }
        };
        stringrequest.setTag("stringrequest");
        VolleyApplication.getQueue().add(stringrequest);
    }


    /**
     * 1.1
     * 封装 StringRequest_headers 数据请求
     *
     * @param method        方式
     * @param url           地址
     * @param headers       参数
     * @param volleyRequest 回调对象
     */
    private static void Volley_StringRequest_headers(int method, String url, final Map<String, String> headers, VolleyHandler<String> volleyRequest)
    {
        StringRequest stringrequest = new StringRequest(method, url, volleyRequest.reqLis, volleyRequest.reqErr)
        {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError
            {
                return headers;
            }
        };
        stringrequest.setTag("stringrequest");
        VolleyApplication.getQueue().add(stringrequest);
    }


    /**
     * 2.
     * JsonObjectRequest GET 请求
     *
     * @param url           请求地址
     * @param volleyRequest 回调函数对象
     */
    public static void JsonObject_Request(String url, VolleyHandler<JSONObject> volleyRequest)
    {
        Volley_JsonObjectRequest(Method.GET, url, null, volleyRequest);
    }

    /**
     * 2.
     * JsonObjectRequest_headers GET 请求
     *
     * @param url           请求地址
     * @param volleyRequest 回调函数对象
     */
    public static void JsonObject_Request_headers(String url, VolleyHandler<JSONObject> volleyRequest, Map<String, String> headers)
    {
        Volley_JsonObjectRequest_headers(Method.GET, url, null, volleyRequest, headers);
    }

    /**
     * 2.
     * JsonObjectRequest POST 请求
     *
     * @param url           请求地址
     * @param jsonObject    请求参数
     * @param volleyRequest 回调函数对象
     */
    public static void JsonObject_Request(String url, JSONObject jsonObject, VolleyHandler<JSONObject> volleyRequest)
    {
        Volley_JsonObjectRequest(Method.POST, url, jsonObject, volleyRequest);
    }

    /**
     * 2.
     * 封装 JsonObjectRequest 请求方法
     *
     * @param method        方式
     * @param url           地址
     * @param jsonObject    参数
     * @param volleyRequest 回调函数对象
     */
    private static void Volley_JsonObjectRequest(int method, String url, JSONObject jsonObject, VolleyHandler<JSONObject> volleyRequest)
    {
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method, url, jsonObject, volleyRequest.reqLis, volleyRequest.reqErr);
        jsonObjectRequest.setTag("jsonObjectRequest");
        VolleyApplication.getQueue().add(jsonObjectRequest);
    }

    /**
     * 2.
     * 封装 JsonObjectRequest_headers 请求方法
     *
     * @param method        方式
     * @param url           地址
     * @param jsonObject    参数
     * @param volleyRequest 回调函数对象
     */
    private static void Volley_JsonObjectRequest_headers(int method, String url, JSONObject jsonObject, VolleyHandler<JSONObject> volleyRequest, final Map<String, String> headers)
    {
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method, url, jsonObject, volleyRequest.reqLis, volleyRequest.reqErr)
        {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError
            {
                return headers;
            }
        };
        jsonObjectRequest.setTag("jsonObjectRequest");
        VolleyApplication.getQueue().add(jsonObjectRequest);
    }


    /**
     * 后面可以自己 拓展 自定义方法
     * 比如说 GsonRequest
     *
     *扩展自定义方法 ：涉及到  匿名类型 T 故 需要 model 借助 对象 来实现
     * 这里将不演示了，因为不同的json数据 ，对应的 model对象 不一样
     */


}